
package com.probiz.estore.sales.dao;

import java.util.List;

import com.probiz.estore.common.model.product.Product;
import com.probiz.estore.common.model.sales.RecommendedProduct;
import com.probiz.estore.core.dao.GenericDao;


public interface RecommendedProductDao extends GenericDao<RecommendedProduct> {
	/**
	 *  根据推荐类型和源商品或目录Id来获得其推荐商品列表
	 * @param recommendedTypeId 推荐类型id
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param firstResult 开始
	 * @param maxResults 最大值
	 * @return 商品列表
	 */
	public List<RecommendedProduct> getRecommendedProductsByRecommendedTypeIdBySourceId(final int recommendedTypeId, final Integer sourceKind,final Integer sourceId, final int firstResult, final int maxResults);


	/**
	 * 根据推荐类型、源商品或目录Id和推荐商品Id获得该推荐商品
	 * @param recommendedTypeId 推荐类型id
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param productId 推荐商品id
	 * @return 关联实体
	 */
	public RecommendedProduct getRecommendedProduct(Integer recommendedTypeId,int sourceKind,Integer sourceId, Integer productId);

	/**
	 * 手动评估  根据[推荐类型name][源Id]获得特定范围的推荐产品(不能重复) 
	 * @param recommendedTypeName 推荐类型名称
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param firstResult 开始
	 * @param maxResults 最大数量
	 * @return 商品列表
	 */
	public List<Product> getProductsByRecommendedTypeNameBySourceId(final String recommendedTypeName, final int sourceKind, final Integer sourceId, final int firstResult, final int maxResults) ;
	/**
	 * 手动评估  根据[推荐类型name][源IdList]获得特定范围的推荐产品(不能重复) 
	 * @param recommendedTypeName 推荐类型名称
	 * @param sourceKind 源类型
	 * @param sourceIds 源id list
	 * @param firstResult 开始
	 * @param maxResults 最大数量
	 * @return
	 */
	public List<Product> getProductsByRecommendedTypeNameBySourceIdList(final String recommendedTypeName, final int sourceKind, final List<Integer> sourceIds,	final int firstResult, final int maxResults);
	/**
	 * 手动评估  根据[推荐类型id][源Id]获得特定范围的推荐产品(不能重复) 
	 * @param recommendedTypeId 推荐类型id
	 * @param sourceKind 源类型
	 * @param sourceId 源id
	 * @param firstResult 开始
	 * @param maxResults 最大数量
	 * @return
	 */
	public List<Product> getProductsByRecommendedTypeIdBySourceId(final Integer recommendedTypeId, final int sourceKind,  final Integer sourceId,	final int firstResult, final int maxResults);
	

}
